﻿//#include <iostream>
//#include <memory>
//using namespace std;
//
//struct ListNode
//{
//	int _data;
//	std::shared_ptr<ListNode> _next;
//	std::shared_ptr<ListNode> _prev;
//	// 这⾥改成weak_ptr，当n1->_next = n2;绑定shared_ptr时
//	// 不增加n2的引⽤计数，不参与资源释放的管理，就不会形成循环引⽤了
//	/*std::weak_ptr<ListNode> _next;
//	std::weak_ptr<ListNode> _prev;*/
//	~ListNode()
//	{
//		cout << "~ListNode()" << endl;
//	}
//};
//
//
//
//int main()
//{
//	// 循环引⽤ -- 内存泄露
//	std::shared_ptr<ListNode> n1(new ListNode);
//	std::shared_ptr<ListNode> n2(new ListNode);
//	cout << n1.use_count() << endl;
//	cout << n2.use_count() << endl;
//	n1->_next = n2;
//	n2->_prev = n1;
//	cout << n1.use_count() << endl;
//	cout << n2.use_count() << endl;
//	// weak_ptr不⽀持管理资源，不⽀持RAII
//	// weak_ptr是专⻔绑定shared_ptr，不增加他的引⽤计数，作为⼀些场景的辅助管理
//	//std::weak_ptr<ListNode> wp(new ListNode);
//	return 0;
//}


#include <iostream>
#include <memory>
using namespace std;

struct Node {
    int val;
    shared_ptr<Node> next;
    shared_ptr<Node> prev;
    Node(int v) : val(v) { cout << "Node(" << val << ") 构造\n"; }
    ~Node() { cout << "Node(" << val << ") 析构\n"; }
};

int main() {
    auto n1 = make_shared<Node>(1);
    auto n2 = make_shared<Node>(2);

    n1->next = n2;
    n2->prev = n1;  // 🔁 n1和n2相互持有 shared_ptr

    return 0;
}
